﻿using System;
using System.Collections.Generic;
using System.Linq;
using MathNet.Numerics.LinearAlgebra;

using cit.CopyDetection.DataObject;

namespace cit.CopyDetection.Model
{
    /// <summary>
    /// Mô hình vector đoạn văn bản
    /// </summary>
    public class ParagraphModel
    {
        private Paragraph _paragraphInfo;
        private Vector _vector;

        /// <summary>
        /// Thông tin đoạn văn bản
        /// </summary>
        public Paragraph ParagraphInfo
        {
            get { return _paragraphInfo; }
            set { _paragraphInfo = value; }
        }

        /// <summary>
        /// Vector biểu diễn đoạn văn bản
        /// </summary>
        public Vector Vector
        {
            get { return _vector; }
            set { _vector = value; }
        }

        /// <summary>
        /// Khởi tạo mô hình đoạn văn bản
        /// </summary>
        /// <param name="paragraph">Thông tin đoạn văn bản</param>
        /// <param name="vector">Vector biểu diễn đoạn văn bản</param>
        public ParagraphModel(Paragraph paragraph, Vector vector)
        {
            _paragraphInfo = paragraph;
            _vector = vector;
        }

        /// <summary>
        /// Khởi tạo mô hình đoạn văn bản
        /// </summary>
        /// <param name="paragraph">Thông tin đoạn văn bản</param>
        /// <param name="components">Giá trị các thành phần vector đoạn văn bản</param>
        public ParagraphModel(Paragraph paragraph, double[] components)
        {
            _paragraphInfo = paragraph;
            _vector = new Vector(components);
        }

        /// <summary>
        /// Khởi tạo mô hình đoạn văn bản
        /// </summary>
        /// <param name="paragraph">Thông tin đoạn văn bản</param>
        /// <param name="size">Chiều dài vector đoạn văn bản</param>
        public ParagraphModel(Paragraph paragraph, int size)
        {
            _paragraphInfo = paragraph;
            _vector = new Vector(size);
        }

        /// <summary>
        /// Khởi tạo mô hình đoạn văn bản
        /// </summary>
        /// <param name="paragraph">Thông tin đoạn văn bản</param>
        /// <param name="size">Chiều dài vector đoạn văn bản</param>
        /// <param name="value">Giá trị mặc nhiên cho các phần tử</param>
        public ParagraphModel(Paragraph paragraph, int size, double value)
        {
            _paragraphInfo = paragraph;
            _vector = new Vector(size, value);
        }
    }
}
